package jp.ac.waseda.cs.washi.game.api;

import jp.ac.waseda.cs.washi.gameaiarena.api.Direction4;

/**
 * プレイヤーがキャラクタに出せる７個の命令を表します。
 */
public enum PlayerAction {
	/**
	 * キャラクタを右方向へ動かす命令
	 */
	RIGHT,
	/**
	 * キャラクタを上方向へ動かす命令
	 */
	UP,
	/**
	 * キャラクタを左方向へ動かす命令
	 */
	LEFT,
	/**
	 * キャラクタを下方向へ動かす命令
	 */
	DOWN,
	/**
	 * キャラクタに魔方陣を開発させる命令
	 */
	SPELL,
	/**
	 * キャラクタに自分の魔方陣をクリア（無地に）させる命令
	 */
	CLEAR,
	/**
	 * キャラクタに行動を行わせない命令
	 */
	NONE, ;

	/**
	 * キャラクタへの移動命令から移動方向を取得します。
	 * 命令が移動命令でない場合はnullを返します。
	 * 
	 * @return キャラクタへの移動命令から移動方向。ただし、命令が移動命令でない場合はnull
	 */
	public Direction4 toDirection() {
		int index = ordinal();
		if (index < 4)
			return Direction4.values()[index];
		return null;
	}

	/**
	 * 指定された方向からキャラクタへの移動命令を取得します。
	 * 
	 * @return キャラクタへの移動命令
	 */
	public static PlayerAction fromDirection(Direction4 direction) {
		if (direction == null)
			return null;
		return PlayerAction.values()[direction.ordinal()];
	}
}
